home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 293_02 / fliphpp.c < prev    next >
C/C++ Source or Header  |  1989-08-23  |  3KB  |  124 lines

  1. /*********************** fliphpp.c ***************************
  2.  
  3. flip an image
  4.  
  5. Daniel Geist
  6. Michael Vannier
  7.  
  8. Mallinckrodt Institute of Radiology
  9. Washington University School of Medicine
  10. 510 S. Kingshighway Blvd.
  11. St. Louis, Mo. 63110
  12.  
  13. ************************************************************/
  14.  
  15. #include <stdio.h>
  16. #include <ctype.h>
  17.  
  18. unsigned char inbuf[256],fnamein[30],fnameout[30];
  19.  
  20. main(argc,argv)
  21.  
  22. int argc;
  23. char *argv[];
  24.  
  25. {
  26.     int i,j,lines;
  27.     FILE *fin,*fout;
  28.  
  29.     switch (argc)
  30.     {
  31.     case 1:
  32.         printf(" Enter fin: ");
  33.         scanf("%s",fnamein);
  34.         printf("Enter fout: ");
  35.         scanf("%s",fnameout);
  36.         printf("Enter lines: ");
  37.         scanf("%d",&lines);
  38.         break;
  39.  
  40.     case 2:
  41.         if(isalpha(argv[1][0])){
  42.             strcpy(fnamein,argv[1]);
  43.             printf("Enter lines: ");
  44.             scanf("%d",&lines);
  45.             change_ext(fnamein,fnameout);
  46.         }
  47.         else{
  48.             get_lines_arg(argv[1],&lines);
  49.             printf(" Enter fin: ");
  50.             scanf("%s",fnamein);
  51.             printf("Enter fout: ");
  52.             scanf("%s",fnameout);
  53.         }
  54.         break;
  55.  
  56.     case 3:
  57.         strcpy(fnamein,argv[1]);
  58.         if(isalpha(argv[2][0])){
  59.             strcpy(fnameout,argv[2]);
  60.             printf("Enter lines: ");
  61.             scanf("%d",&lines);
  62.         }
  63.         else{
  64.             get_lines_arg(argv[2],&lines);
  65.             change_ext(fnamein,fnameout);
  66.         }
  67.         break;
  68.     default:
  69.         strcpy(fnamein,argv[1]);
  70.         strcpy(fnameout,argv[2]);
  71.         get_lines_arg(argv[3],&lines);
  72.     } 
  73.     fin=fopen(fnamein,"rb");
  74.     fout=fopen(fnameout,"wb");
  75.     for(i=lines-1;i>=0;i--){
  76.         fseek(fin,(long)i*256,SEEK_SET);
  77.         fread(inbuf,1,256,fin);
  78.         fwrite(inbuf,1,256,fout);
  79.     }
  80.     fclose(fin);
  81.     fclose(fout);
  82. }
  83.  
  84. get_lines_arg(s,n)
  85. char s[];
  86. int *n;
  87.     FILE *f;
  88.     char c;
  89.  
  90.     if(s[0]=='/') switch(s[1]){
  91.     case 'd':
  92.     case 'D':
  93.         *n=256;
  94.         break;
  95.     case 'p':
  96.     case 'P':
  97.         f=fopen("param.dat","rb");
  98.         fscanf(f,"%c %d",&c,n);
  99.         break;
  100.     default :
  101.         error_exit();
  102.     }
  103.     else if( s[0] >='0' && s[0] <= '9') sscanf(s,"%d",n);
  104.     else error_exit();
  105. }
  106.  
  107. error_exit()
  108. {
  109.     printf("bad parameters\n");
  110.     exit();
  111. }
  112.  
  113. change_ext(s1,s2)
  114. char *s1,*s2;
  115.     int i;
  116.     do{
  117.         *(s2++)=*(s1++);
  118.     }
  119.     while(*(s2-1)!='.');
  120.     strcpy(s2,"flp");
  121. }
  122.